package com.jcyang.eshop.Inventory.updater;

import com.jcyang.eshop.Inventory.dao.GoodsStockDAO;
import com.jcyang.eshop.Inventory.domain.GoodsStockDO;
import com.jcyang.eshop.common.util.DateProvider;
import com.jcyang.eshop.wms.domain.ReturnGoodsInputOrderItemDTO;

import java.util.List;
import java.util.Map;

/**
 * 退货入库
 *
 * @author jcyang
 */
public class ReturnInputStockUpdater extends AbstractStockUpdater {

    /**
     * 退货入库单条目DTO集合
     */
    private Map<Long, ReturnGoodsInputOrderItemDTO> returnGoodsInputOrderItemDTOMap;

    /**
     * 构造函数
     *
     * @param goodsStockDOs                   商品库存DO对象
     * @param goodsStockDAO                   商品库存管理模块的DAO组件
     * @param dateProvider                    日期辅助组件
     * @param returnGoodsInputOrderItemDTOMap 退货入库单条目DTO集合
     */
    public ReturnInputStockUpdater(List<GoodsStockDO> goodsStockDOs,
                                   GoodsStockDAO goodsStockDAO,
                                   DateProvider dateProvider,
                                   Map<Long, ReturnGoodsInputOrderItemDTO> returnGoodsInputOrderItemDTOMap) {
        super(goodsStockDOs, goodsStockDAO, dateProvider);
        this.returnGoodsInputOrderItemDTOMap = returnGoodsInputOrderItemDTOMap;
    }

    /**
     * 更新销售酷讯
     */
    @Override
    protected void updateSaleStockQuantity() throws Exception {
        for (GoodsStockDO goodsStockDO : goodsStockDOs) {
            ReturnGoodsInputOrderItemDTO returnGoodsInputOrderItemDTO =
                    returnGoodsInputOrderItemDTOMap.get(goodsStockDO.getId());
            goodsStockDO.setSaleStockQuantity(goodsStockDO.getSaledStockQuantity()
                    + returnGoodsInputOrderItemDTO.getArrivalCount());
        }

    }

    /**
     * 更新锁定库存
     */
    @Override
    protected void updateLockedStockQuantity() throws Exception {

    }

    /**
     *   更新已销售库存
     */
    @Override
    protected void updateSaledStockQuantity() throws Exception {
       for (GoodsStockDO goodsStockDO : goodsStockDOs){
           ReturnGoodsInputOrderItemDTO returnGoodsInputOrderItemDTO =
                   returnGoodsInputOrderItemDTOMap.get(goodsStockDO.getId());
           goodsStockDO.setSaledStockQuantity(goodsStockDO.getSaleStockQuantity()
                   - returnGoodsInputOrderItemDTO.getArrivalCount());
       }
    }
}
